#include "WrapperBufferDiferido.h"
#include "funciones.h"

namespace Toolkit
{

WrapperBufferDiferido::WrapperBufferDiferido()
{
	this->unidadAnterior = -1;
	this->unidadSiguiente = -1;
	this->direccionUnidad = -1;
	this->dirtyBit = false;

}

WrapperBufferDiferido::~WrapperBufferDiferido()
{

}

void WrapperBufferDiferido::serializar(stringstream &stream,
		const TipoSerializacion &tSerializacion) const
{
	serializacionDigito(stream, tSerializacion, unidadAnterior);
	serializacionDigito(stream, tSerializacion, unidadSiguiente);
	serializacionDigito(stream, tSerializacion, direccionUnidad);
	serializacionDigito(stream, tSerializacion, dirtyBit);

	if (componente != NULL)
	{
		this->componente->serializar(stream);
	}
}

void WrapperBufferDiferido::hidratar(stringstream &stream, const Dato &dato,
		const TipoSerializacion &tSerializacion)
{
	hidratacionDigito(stream, tSerializacion, unidadAnterior);
	hidratacionDigito(stream, tSerializacion, unidadSiguiente);
	hidratacionDigito(stream, tSerializacion, direccionUnidad);
	hidratacionDigito(stream, tSerializacion, dirtyBit);

	if (componente != NULL)
	{
		this->componente->hidratar(stream, dato);
	}

}

long int WrapperBufferDiferido::getUnidadAnterior() const
{
	return this->unidadAnterior;
}

void WrapperBufferDiferido::setUnidadAnterior(
		const signed long int &unidadAnterior)
{
	this->unidadAnterior = unidadAnterior;
}

long int WrapperBufferDiferido::getUnidadSiguiente() const
{
	return this->unidadSiguiente;
}

void WrapperBufferDiferido::setUnidadSiguiente(
		const signed long int &unidadSiguiente)
{
	this->unidadSiguiente = unidadSiguiente;
}

bool WrapperBufferDiferido::getDirtyBit() const
{
	return this->dirtyBit;
}

void WrapperBufferDiferido::setDirtyBit(const bool &dirtyBit)
{
	this->dirtyBit = dirtyBit;
}

long int WrapperBufferDiferido::getDireccionUnidad() const
{
	return this->direccionUnidad;
}

void WrapperBufferDiferido::setDireccionUnidad(
		const signed long int &direccionUnidad)
{
	this->direccionUnidad = direccionUnidad;
}

WrapperComponente *WrapperBufferDiferido::clonarSinComponente() const
{
	WrapperBufferDiferido *nuevo = new WrapperBufferDiferido();

	nuevo->setDireccionUnidad(this->getDireccionUnidad());
	nuevo->setDirtyBit(this->getDirtyBit());
	nuevo->setUnidadAnterior(this->getUnidadAnterior());
	nuevo->setUnidadSiguiente(this->getUnidadSiguiente());

	return nuevo;
}

}
